草庐IT

C++ 运算符 [] 魔法

全部标签

c++ - 无法分配给重载的取消引用 (*) 运算符

我为我的模板类重载了取消引用运算符:templateclassNode{public:T*pointer;Toperator*(){return*pointer;}};我希望能够写入main中的指针:Noden;*n=33;但是我得到这个错误:lvaluerequiredasleftoperandofassignment我应该如何重载此运算符才能写入指针? 最佳答案 只要给它T&作为返回类型。然后你有一个左值。现在的问题是您要返回指向的对象的拷贝。 关于c++-无法分配给重载的取消引用(

c++ - add 的位运算

你能帮我弄清楚为什么以下表达式为真:x+y=x^y+(x&y)我正在从按位逻辑中寻找一些规则来解释这个数学等价物。 最佳答案 这就像解决一个普通的以10为底的加法问题955+445,首先将所有列单独相加并丢弃带进位的1:955445-----390然后找到应该有进位1的所有列:955445-----101将其移动并将其添加到原始结果中:390+1010------1400所以基本上您是在做加法,但忽略所有进位的1,然后作为一个单独的步骤在后面添加进位的。在基数2中,当任一位为0时,XOR(^)正确执行加法。当两位都为1时,它会执行不

c++ - 模板结构中的友元运算符引发重新定义错误

考虑这段代码:templatestructA{friendstd::ostream&operatori;Aj;}它不编译,因为A的两个实例实例化了operator两次使用相同的签名,所以我收到此错误:test.cpp:26:25:error:redefinitionof‘std::ostream&operator如何解决这个问题?当该运算符可能对两个不同的实例化具有相同的签名时,我如何才能在模板中拥有一个友元运算符?如何在不触发重新定义错误的情况下解决此问题? 最佳答案 我真的看不出像这样声明friend有什么用,尽管如此你可以这样

通过具有指向函数的公共(public)成员指针的对象调用 C++ 函数,而不使用取消引用运算符

好吧,我认为这个标题已经足够描述了(但令人困惑,抱歉)。我正在阅读这个图书馆:Timer1。在头文件中有一个指向函数的公共(public)成员指针如下:classTimerOne{public:void(*isrCallback)();//C-styleptrto`void(void)`function};存在一个TimerOne类的实例化对象,称为“Timer1”。Timer1调用函数如下:Timer1.isrCallback();这怎么正确?我熟悉使用取消引用运算符通过函数指针调用函数。例如:(*myFunc)();所以我希望通过对象进行的上述调用更像是:(*Timer1.isrC

c++ - 整数溢出和运算顺序

我最近遇到了一个关于我的C++代码的问题,这让我想知道我是否对编译器对长操作的处理有一些误解......看看下面的代码:#includeintmain(){inti=1024,j=1024,k=1024,n=3;longlongl=5;std::cout对我来说,这3行中任何一行的乘法运算顺序是不确定的。然而,这是我认为会发生的事情(假设int是32b,longlong是64b并且它们都遵循IEEE规则):对于第2行,首先计算括号,使用int作为中间结果,导致溢出并存储-1073741824。对于最后一次乘法,此中间结果被提升为longlong,因此打印结果应为-5368709120。

c++ - noexcept 运算符在调用指向成员函数的指针后失败

这个MWE可能看起来做作,但失败的static_assert仍然令人惊讶:#includestructC{voidf()noexcept{}usingF=void(C::*)();staticconstexprFhandler()noexcept{return&C::f;}voidg()noexcept(noexcept((this->*handler())())){}};intmain(){static_assert(noexcept(std::declval().g()));}魔杖链接:https://wandbox.org/permlink/a8HSyfuyX1buGrbZ我希望

C++ 将运算符放在类末尾的目的是什么?

这个问题在这里已经有了答案:What'stheuseoftheprivatecopyconstructorinc++(7个答案)关闭5年前。假设我有一个名为Component的简单C++组件,如下所示:classComponent{public:explicitComponent(inti):_integer(i){}~Component(){}private:int_integer;Component(constComponent&);Component&operator=(constComponent&);};我通常会在代码中找到我阅读的最后两条说明,但我并不真正理解它。是否必须正

C++ 二元运算符的优先顺序

以下参数的测试顺序是什么(在C++中)?if(a||b&&c){}我刚刚在我们的应用程序中看到这段代码,我讨厌它,我想添加一些括号来澄清顺序。但我不想添加括号,直到我知道我将它们添加到正确的位置。编辑:接受的答案和跟进此链接包含更多信息,但并不完全清楚其含义。好像||和&&的优先级相同,在这种情况下,它们是从左到右求值的。http://msdn.microsoft.com/en-us/library/126fe14k.aspx 最佳答案 [http://www.cppreference.com/wiki/operator_prece

c++ - 使用赋值运算符返回 *this

我仔细研究了自己的复制构造函数,它总体上对我来说很有意义。但是,关于做自己的赋值运算符这个话题,我需要有人帮我填空。我几乎不明白你为什么要在所有示例中返回*this,例如下面的示例:Foo&Foo::operator=(constFoo&f){//somelogicreturn*this;}所以如果我有这样的语句:Foof;f.hour=7;Foog;g=f;一旦赋值运算符运行,它就会返回对g对象(*this)的引用。所以现在的问题是,我现在不会有这样一个隐含的声明吗?:g=g(gbeingareference)事情是,以前,设置对一个对象的引用会导致调用复制构造函数。在这种情况下,它

c++ - 仅使用 < 运算符检查整数是否在范围内

我需要编写一些代码来检查给定的整数是否在某个范围内。(范围由一对整数表示。)所以,给定一个范围r定义为std::pair,和一个测试整数n,我想说:if(n>=r.first&&n问题是,我需要使用std::less比较仿函数来执行此操作,这意味着我只能使用小于运算符。我正在尝试想出等效的表达式。我很确定我是正确的,但我并不完全有信心。我想到的表达方式是:(!cmp(n,r.first)&&!cmp(r.second,n))哪里cmp是std::less的实例我做对了吗? 最佳答案 轮询他人并不是验证正确性的最佳方式。:)相反,请考